package com.java.grammer.blockidentifies;

/**
 * @author luzhikun
 * @date 2020/12/10-16:09
 * 类的成员 四：   代码块（初始化块）
 * 1.代码块的作用：用来初始化类、对象
 * 2.代码块如果有修饰的话只能用static来修饰
 * 3。 分类： 静态代码块 和 非静态代码块、      **********由父及子  静态先行
 * 4. 静态代码块
 * 内部可以有输出语句
 * 随着类的加载而执行  而且只执行一次
 * 可以用来初始化类的信息
 * 如果在一个类中定义了多个静态代码块 ， 谁先写 先执行它
 * 静态代码块的执行要优先非静态代码块执行
 * 静态代码块只能调用静态的属性和方法，不能调用非静态的结构
 * 5.非静态的代码块
 * 内部可以有输出语句
 * 不会随着类的加载而执行
 * 每创建一次就执行一次非静态代码块
 * 如果在一个类中定义了多个非静态代码块 ， 谁先写 先执行它
 * 非静态代码块内部可以掉用静态属性、方法 和静态属性和静态方法
 * 作用：可以再创建对象时，对对象的属性等进行初始化
 */
public class BlockTest {
    public static void main(String[] args) {
        String a = Person.desp;
        System.out.println(a);
        //Person person=new Person();
        Person person1 = new Person();
    }

}

class Person {
    String name;
    int age;
    static String desp = "我是一个人";

    public Person() {

    }

    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }

    {
        System.out.println("剑指offer-1");
    }

    {
        System.out.println("剑指你妹-2");
    }

    static {
        desp = "我是一个爱学习的人";
        System.out.println("我牛逼");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void eat() {
        System.out.println("吃饭");
    }
    //public void toString(){
    // return a;
    // }

}